package com.monitorabrasil.participacidadao.views;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.github.mikephil.charting.animation.Easing;
import com.github.mikephil.charting.charts.LineChart;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.components.LimitLine;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.LineDataSet;
import com.monitorabrasil.participacidadao.R;
import com.monitorabrasil.participacidadao.model.Grafico;
import com.parse.FindCallback;
import com.parse.ParseException;
import com.parse.ParseObject;
import com.parse.ParseQuery;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
* Created by geral_000 on 03/12/2015.
*/
public class VereadorCotaFragment extends Fragment {
public static final String ID_POLITICO = "idPolitico";
private LineChart mChart;
private ParseObject politico;
private String idPolitico;
float maximo = 0f, minimo = 0f;
View mView;
ArrayList<String> xVals = new ArrayList<String>();
ArrayList<Entry> yVals = new ArrayList<Entry>();
private ArrayList<Grafico> graficos =new ArrayList<Grafico>();
public VereadorCotaFragment() {
}
public static VereadorCotaFragment newInstance( String idPolitico) {
VereadorCotaFragment fragment = new VereadorCotaFragment();
Bundle args = new Bundle();
args.putString(ID_POLITICO, idPolitico);
fragment.setArguments(args);
return fragment;
}
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
idPolitico = getArguments().getString(ID_POLITICO);
}
Activity activity = this.getActivity();
View view = inflater.inflate(R.layout.fragment_politico_gastos, container, false);
Bundle bundle = getArguments();
politico = buscaGastos(idPolitico) ;
mView=view;
return view;
}
private void buildGraph(){
mChart = (LineChart)mView.findViewById(R.id.chart1);
mChart.setDrawGridBackground(false);
mChart.setDescription("");
mChart.setNoDataTextDescription("You need to provide data for the chart.");
// enable value highlighting
mChart.setHighlightEnabled(true);
// enable touch gestures
mChart.setTouchEnabled(true);
// enable scaling and dragging
mChart.setDragEnabled(true);
mChart.setScaleEnabled(true);
// mChart.setScaleXEnabled(true);
// mChart.setScaleYEnabled(true);
// if disabled, scaling can be done on x- and y-axis separately
mChart.setPinchZoom(true);
// enable/disable highlight indicators (the lines that indicate the
// highlighted Entry)
mChart.setHighlightEnabled(false);
LimitLine ll1 = new LimitLine(130f, "Upper Limit");
ll1.setLineWidth(4f);
ll1.enableDashedLine(10f, 10f, 0f);
ll1.setLabelPosition(LimitLine.LimitLabelPosition.POS_RIGHT);
ll1.setTextSize(10f);
LimitLine ll2 = new LimitLine(-30f, "Lower Limit");
ll2.setLineWidth(4f);
ll2.enableDashedLine(10f, 10f, 0f);
ll2.setLabelPosition(LimitLine.LimitLabelPosition.POS_RIGHT);
ll2.setTextSize(10f);
YAxis leftAxis = mChart.getAxisLeft();
leftAxis.removeAllLimitLines(); // reset all limit lines to avoid overlapping lines
//leftAxis.addLimitLine(ll1);
//leftAxis.addLimitLine(ll2);
leftAxis.setAxisMaxValue(maximo + 200);
minimo = minimo-200;
if(minimo < 0f){
minimo=0f;
}
leftAxis.setAxisMinValue(minimo);
leftAxis.setStartAtZero(false);
//leftAxis.setYOffset(20f);
leftAxis.enableGridDashedLine(10f, 10f, 0f);
// limit lines are drawn behind data (and not on top)
leftAxis.setDrawLimitLinesBehindData(true);
mChart.getAxisRight().setEnabled(false);
// add data
setData();
// mChart.setVisibleXRange(20);
// mChart.setVisibleYRange(20f, AxisDependency.LEFT);
// mChart.centerViewTo(20, 50, AxisDependency.LEFT);
mChart.animateX(2500, Easing.EasingOption.EaseInOutQuart);
// mChart.invalidate();
// get the legend (only possible after setting data)
Legend l = mChart.getLegend();
// modify the legend ...
// l.setPosition(LegendPosition.LEFT_OF_CHART);
l.setForm(Legend.LegendForm.LINE);
}
private ParseObject buscaGastos(String id) {
ParseObject politico = buscaPolitico(id);
xVals =new ArrayList<String>();
yVals = new ArrayList<Entry>();
maximo = 0f;
minimo = 0f;
ParseQuery<ParseObject> query = ParseQuery.getQuery("Verba");
query.whereEqualTo("politico",politico);
query.orderByAscending("createdAt");
query.findInBackground(new FindCallback<ParseObject>() {
public void done(List<ParseObject> gastos, ParseException e) {
Iterator<ParseObject> gastoIt = gastos.iterator();
int i=0;
while (gastoIt.hasNext()) {
ParseObject g = gastoIt.next();
float possivelMaximo = Float.valueOf(g.getString("valor"));
if(possivelMaximo > maximo ){
maximo = possivelMaximo;
}
if(minimo > possivelMaximo || i==0){
minimo=possivelMaximo;
}
String mes = g.getString("mes");
if(mes.length() > 3)
xVals.add(g.getString("mes").substring(0,3)+" "+g.getString("ano"));
else
xVals.add(g.getString("mes")+"/"+g.getString("ano"));
yVals.add(new Entry(possivelMaximo, i));
i++;
}
buildGraph();
}
});
return null;
}
private ParseObject buscaPolitico(String id) {
ParseQuery<ParseObject> query = ParseQuery.getQuery("Politico");
query.fromLocalDatastore();
try {
return query.get(id);
} catch (com.parse.ParseException e) {
e.printStackTrace();
}
return null;
}
private void setData() {
// create a dataset and give it a type
LineDataSet set1 = new LineDataSet(yVals, "Verba idenizatoria");
set1.setFillAlpha(110);
set1.setFillColor(Color.RED);
// set the line to be drawn like this "- - - - - -"
set1.enableDashedLine(10f, 5f, 0f);
set1.setColor(Color.BLACK);
set1.setCircleColor(Color.BLACK);
set1.setLineWidth(1f);
set1.setCircleSize(3f);
set1.setDrawCircleHole(false);
set1.setValueTextSize(9f);
set1.setFillAlpha(65);
set1.setFillColor(Color.BLACK);
// set1.setDrawFilled(true);
// set1.setShader(new LinearGradient(0, 0, 0, mChart.getHeight(),
// Color.BLACK, Color.WHITE, Shader.TileMode.MIRROR));
ArrayList<LineDataSet> dataSets = new ArrayList<LineDataSet>();
dataSets.add(set1); // add the datasets
// create a data object with the datasets
LineData data = new LineData(xVals, dataSets);
// set data
mChart.setData(data);
}
}